home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 23 / Amiga Format AFCD23 (Feb 1998, Issue 107).iso / -seriously_amiga- / shareware / programming / e / easyplugins / source / toolbar.e < prev    next >
Text File  |  1997-12-06  |  8KB  |  336 lines

  1.  
  2. /*
  3.  
  4.     toolbar_plugin FOR EasyPLUGINs
  5.  
  6.     (requires EasyGUI v3.3b)
  7.  
  8. */
  9.  
  10. OPT MODULE, PREPROCESS, OSVERSION=37, NOWARN
  11.  
  12. ->> toolbar_plugin: Modules
  13.  
  14. MODULE 'tools/easygui', 'graphics/text',
  15.        'gadtools', 'libraries/gadtools',
  16.        'intuition/gadgetclass',
  17.        'intuition/intuition', 'graphics/rastport'
  18.  
  19. MODULE 'utility', 'utility/tagitem'
  20.  
  21. -><
  22.  
  23. /* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ */
  24.  
  25. ->> toolbar_plugin: Definitions
  26.  
  27. EXPORT OBJECT toolbar_plugin OF plugin PRIVATE
  28.  
  29.     contents:PTR TO LONG
  30.     disabled
  31.     display_all
  32.     font:PTR TO textattr
  33.     function:PTR TO LONG
  34.     vertical
  35.  
  36.     total_gadgets
  37.     valid_gadgets
  38.     gadget_ptrs:PTR TO LONG
  39.  
  40. ENDOBJECT
  41.  
  42. #define GadgetWidth(text, font) (IntuiTextLength([1, 0, RP_JAM1,\
  43.                                  0, 0, font, text, NIL]:intuitext) + 12)
  44.  
  45. #define GadgetHeight(font)      (font.ysize + 4)
  46.  
  47. -> PROGRAMMER_ID | MODULE_ID
  48. ->      $01      |   $03
  49.  
  50.  
  51. EXPORT ENUM PLA_ToolBar_Contents=$81030001,     -> [I..]
  52.             PLA_ToolBar_Disabled,               -> [ISG]
  53.             PLA_ToolBar_DisplayAll,             -> [I..]
  54.             PLA_ToolBar_Font,                   -> [I.G]
  55.             PLA_ToolBar_Function,               -> [IS.]
  56.             PLA_ToolBar_Vertical                -> [I..]
  57.  
  58. CONST X_GAP=3, Y_GAP=2
  59.  
  60. -><
  61.  
  62. /* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ */
  63.  
  64. ->> toolbar_plugin: toolbar() & end()
  65.  
  66. PROC toolbar(tags:PTR TO tagitem) OF toolbar_plugin
  67.  
  68.     IF utilitybase
  69.  
  70.         self.contents    := GetTagData(PLA_ToolBar_Contents, NIL, tags)
  71.         self.disabled    := GetTagData(PLA_ToolBar_Disabled, FALSE, tags)
  72.         self.display_all := GetTagData(PLA_ToolBar_DisplayAll, FALSE, tags)
  73.         self.function    := GetTagData(PLA_ToolBar_Function, NIL, tags)
  74.         self.font        := GetTagData(PLA_ToolBar_Font, NIL, tags)
  75.         self.vertical    := GetTagData(PLA_ToolBar_Vertical, FALSE, tags)
  76.  
  77.     ELSE
  78.  
  79.         Raise("util")
  80.  
  81.     ENDIF
  82.  
  83.     IF self.contents
  84.  
  85.         IF ListLen(self.contents)>0
  86.  
  87.             self.total_gadgets:=ListLen(self.contents)
  88.  
  89.             self.gadget_ptrs:=List(self.total_gadgets)
  90.  
  91.         ENDIF
  92.  
  93.     ENDIF
  94.  
  95. ENDPROC
  96.  
  97. PROC end() OF toolbar_plugin
  98.  
  99.     IF self.gadget_ptrs THEN Dispose(self.gadget_ptrs)
  100.  
  101. ENDPROC
  102.  
  103. -><
  104.  
  105. ->> toolbar_plugin: set() & get()
  106.  
  107. PROC set(attr, value) OF toolbar_plugin
  108.  
  109.     DEF a
  110.  
  111.     SELECT attr
  112.  
  113.         CASE PLA_ToolBar_Disabled
  114.  
  115.             IF self.disabled<>value
  116.  
  117.                 self.disabled:=value
  118.  
  119.                 FOR a:=0 TO (self.valid_gadgets-1)
  120.  
  121.                     IF (self.gadget_ptrs[a])
  122.  
  123.                         Gt_SetGadgetAttrsA(self.gadget_ptrs[a], self.gh.wnd, NIL, [GA_DISABLED, self.disabled, TAG_DONE])
  124.  
  125.                     ENDIF
  126.  
  127.                 ENDFOR
  128.  
  129.             ENDIF
  130.  
  131.         CASE PLA_ToolBar_Function
  132.  
  133.             self.function:=value
  134.  
  135.     ENDSELECT
  136.  
  137. ENDPROC
  138.  
  139. PROC get(attr) OF toolbar_plugin
  140.  
  141.     SELECT attr
  142.  
  143.         CASE PLA_ToolBar_Disabled;  RETURN self.disabled, TRUE
  144.         CASE PLA_ToolBar_Font;      RETURN self.font, TRUE
  145.  
  146.     ENDSELECT
  147.  
  148. ENDPROC -1, FALSE
  149.  
  150. -><
  151.  
  152. ->> toolbar_plugin: min_size() & will_resize()
  153. PROC min_size(font:PTR TO textattr, font_height) OF toolbar_plugin
  154.  
  155.     DEF width=0, height=0, a
  156.  
  157.     IF self.total_gadgets
  158.  
  159.         IF self.display_all
  160.  
  161.             FOR a:=0 TO (self.total_gadgets-1)
  162.  
  163.                 IF self.vertical
  164.  
  165.                     width:=Max(width, GadgetWidth(self.contents[a], (IF self.font THEN self.font ELSE font)))
  166.                     height:=height + GadgetHeight(IF self.font THEN self.font ELSE font)
  167.  
  168.                     IF (a < (self.total_gadgets-1)) THEN height:=height + Y_GAP
  169.  
  170.                 ELSE
  171.  
  172.                     width:=width + GadgetWidth(self.contents[a], (IF self.font THEN self.font ELSE font))
  173.  
  174.                     IF (a < (self.total_gadgets-1)) THEN width:=width + X_GAP
  175.  
  176.                 ENDIF
  177.  
  178.             ENDFOR
  179.  
  180.         ELSE
  181.  
  182.             IF self.vertical
  183.  
  184.                 FOR a:=0 TO (self.total_gadgets-1)
  185.  
  186.                     width:=Max(width, GadgetWidth(self.contents[a], (IF self.font THEN self.font ELSE font)))
  187.  
  188.                 ENDFOR
  189.  
  190.             ELSE
  191.  
  192.                 width:=GadgetWidth(self.contents[0], (IF self.font THEN self.font ELSE font))
  193.  
  194.             ENDIF
  195.  
  196.         ENDIF
  197.  
  198.         IF (self.display_all=FALSE) OR (self.vertical=FALSE)
  199.  
  200.             height:=GadgetHeight(IF self.font THEN self.font ELSE font)
  201.  
  202.         ENDIF
  203.  
  204.     ENDIF
  205.  
  206. ENDPROC width, height
  207.  
  208. PROC will_resize() OF toolbar_plugin
  209.  
  210.     IF self.display_all
  211.  
  212.         RETURN FALSE
  213.  
  214.     ELSE
  215.  
  216.         RETURN (IF self.vertical THEN RESIZEY ELSE RESIZEX)
  217.  
  218.     ENDIF
  219.  
  220. ENDPROC
  221. -><
  222.  
  223. ->> toolbar_plugin: gtrender()
  224. PROC gtrender(gl, vis, font:PTR TO textattr, x, y, xs, ys, win:PTR TO window) OF toolbar_plugin
  225.  
  226.     DEF a, x_loc, y_loc, g_width, g_height
  227.  
  228.     self.valid_gadgets:=NIL
  229.  
  230.     IF self.vertical
  231.  
  232.         y_loc:=y
  233.  
  234.         g_height:=GadgetHeight(IF self.font THEN self.font ELSE font)
  235.  
  236.         FOR a:=0 TO (self.total_gadgets-1)
  237.  
  238.             EXIT ((y_loc + g_height) > (y + ys))
  239.  
  240.             self.gadget_ptrs[a]:=CreateGadgetA(BUTTON_KIND, (IF (a=0) THEN gl ELSE self.gadget_ptrs[a-1]),
  241.                                                [x, y_loc, xs, g_height, self.contents[a],
  242.                                                (IF self.font THEN self.font ELSE font),
  243.                                                 (a + 1), NIL, vis, FALSE]:newgadget,
  244.                                                [GA_DISABLED, self.disabled,
  245.                                                 TAG_DONE])
  246.  
  247.             self.valid_gadgets:=self.valid_gadgets + 1
  248.  
  249.             y_loc:=y_loc + g_height + Y_GAP
  250.  
  251.         ENDFOR
  252.  
  253.     ELSE
  254.  
  255.         x_loc:=x
  256.  
  257.         FOR a:=0 TO (self.total_gadgets-1)
  258.  
  259.             g_width:=GadgetWidth(self.contents[a], (IF self.font THEN self.font ELSE font))
  260.  
  261.             EXIT ((x_loc + g_width) > (x + xs))
  262.  
  263.             self.gadget_ptrs[a]:=CreateGadgetA(BUTTON_KIND, (IF (a=0) THEN gl ELSE self.gadget_ptrs[a-1]),
  264.                                                [x_loc, y, g_width, ys, self.contents[a],
  265.                                                (IF self.font THEN self.font ELSE font),
  266.                                                 (a + 1), NIL, vis, FALSE]:newgadget,
  267.                                                [GA_DISABLED, self.disabled,
  268.                                                 TAG_DONE])
  269.  
  270.             self.valid_gadgets:=self.valid_gadgets + 1
  271.  
  272.             x_loc:=x_loc + g_width + X_GAP
  273.  
  274.         ENDFOR
  275.  
  276.     ENDIF
  277.  
  278. ENDPROC (IF self.valid_gadgets>0 THEN self.gadget_ptrs[self.valid_gadgets-1] ELSE gl)
  279. -><
  280.  
  281. ->> toolbar_plugin: message_test() & message_action()
  282.  
  283. PROC message_test(imsg:PTR TO intuimessage, win:PTR TO window) OF toolbar_plugin
  284.  
  285.     DEF a, ret=FALSE, gadget:PTR TO newgadget
  286.  
  287.     IF imsg.class=IDCMP_GADGETUP
  288.  
  289.         FOR a:=0 TO (self.valid_gadgets-1)
  290.  
  291.             IF (imsg.iaddress=self.gadget_ptrs[a])
  292.  
  293.                 gadget:=self.gadget_ptrs[a]
  294.  
  295.                 gadget.userdata:=TRUE
  296.                 ret:=TRUE
  297.  
  298.             ENDIF
  299.  
  300.             EXIT ret
  301.  
  302.         ENDFOR
  303.  
  304.     ENDIF
  305.  
  306. ENDPROC ret
  307.  
  308. PROC message_action(class, qual, code, win:PTR TO window) OF toolbar_plugin
  309.  
  310.     DEF a, gadget:PTR TO newgadget, function:PTR TO LONG
  311.  
  312.     IF class=IDCMP_GADGETUP
  313.  
  314.         FOR a:=0 TO (self.valid_gadgets-1)
  315.  
  316.             IF (gadget:=self.gadget_ptrs[a])
  317.  
  318.                 IF gadget.userdata
  319.  
  320.                     function:=self.function
  321.  
  322.                     function(self, (a+1))
  323.                     gadget.userdata:=FALSE
  324.  
  325.                 ENDIF
  326.  
  327.             ENDIF
  328.  
  329.         ENDFOR
  330.  
  331.     ENDIF
  332.  
  333. ENDPROC FALSE
  334.  
  335. -><
  336.